package com.guqj.thread;

public class ThreadTest {

	public static void main(String[] args) throws InterruptedException {
		/*
		 * Thread.sleep(0) 进入就绪状态
		 * 如果n=0时，意味着当前线程的时间片没有用完，主动放弃自己剩下的时间片，进入就绪状态。这种情况下只能调度优先级相等或更高的线程，意味着优先级低的线程很难获得时间片，
		 * 很可能永远都调用不到。当没有符合条件的线程，会一直占用 CPU 时间片，造成 CPU 100%占用率。
		 */
		Thread.sleep(0);
		System.out.println("Thread sleep 0");
		/*
		 * Thread.sleep(1) 进入阻塞状态
		 * 如果n>0，会强制当前线程放弃剩余时间片，并休息n秒（因为不是实时操作系统，时间无法保证精确，一般可能会滞后几毫秒或一个时间片），进入阻塞状态。这种情况下所有其它就绪状态的线程都有机会竞争时间片，
		 * 而不用在乎优先级。无论有没有符合的线程，都会放弃 CPU 时间，因此 CPU 占用率较低。
		 */
		Thread.sleep(1000);
		System.out.println("Thread sleep 1000");
		/*
		 * Yield 的中文翻译为 “让步，让位”，这里意思是当前线程主动让出时间片，并让操作系统调度其它就绪态的线程使用时间片
		 * 如果调用 Yield，只是把当前线程放入到就绪队列中，而不是阻塞队列
		 * 如果没有找到其它就绪态的线程，则当前线程继续运行
		 * 比 Thread.Sleep(0) 速度要快，可以让低于当前优先级的线程得以运行
		 */
		Thread.yield();
		System.out.println("Thread yield");
	}
}
